//#include "shadermanager.h"

//ShaderManager::ShaderManager(){
       
//}

//ShaderManager::~ShaderManager()
//{
//    glDetachShader(shader_program,vertex_shader);
//    glDetachShader(shader_program,fragment_shader);

//    glDeleteShader(vertex_shader);
//    glDeleteShader(fragment_shader);
//    glDeleteProgram(shader_program);
//}

//GLuint ShaderManager::getProgram(){
//    return this->shader_program;
//}

//int ShaderManager::loadShader(string source_file, int type)
//{
//    std::ifstream file;
//    std::string source;
//    file.open(source_file.c_str());
//    if (file.is_open())
//    {
//    	file.seekg(0, std::ios::end);
//    	// Pega a posição do ponteiro atual, ou seja, o tamanho do arquivo
//    	unsigned int fileSize = static_cast<unsigned int>(file.tellg());
//    	// Alocamos espaço necessário para leitura da source
//    	source.resize(fileSize);
//    	// Apontamos para o inicio do arquivo
//    	file.seekg(0, std::ios::beg);
//    	// Copiamos o arquivo na string
//    	file.read(&source[0], fileSize);
//    }
//   if(source=="")
//   {
//       switch(type)
//       {
//            case GL_VERTEX_SHADER:
//                log << "Error reading vertex shader file." << std::endl;
//                return -1;
//               break;
//           case GL_FRAGMENT_SHADER:
//               log << "Error reading fragment shader file." << std::endl;
//               return -1;
//               break;
//           default:
//               break;
//       }
//   }
    
//    const GLchar *convSource = reinterpret_cast<const GLchar *>(source.c_str());
  
//    switch(type)
//    {
//        case GL_VERTEX_SHADER:
//            log << "Vertex shader source loaded successfully." << std::endl;
//            vertex_shader = glCreateShader(GL_VERTEX_SHADER);
//            glShaderSource(vertex_shader,1,&convSource,0);
//            glCompileShader(vertex_shader);
//            shaderLog(VERTEX_LOG);
//            break;
//        case GL_FRAGMENT_SHADER:
//            log << "Fragment shader source loaded successfully." << std::endl;
//            fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
//            glShaderSource(fragment_shader,1,&convSource,0);
//            glCompileShader(fragment_shader);
//            shaderLog(FRAGMENT_LOG);
//            break;
//        default:
//            break;
//    }
//    return 0;
//}

//void ShaderManager::shaderLog(int type)
//{
//    int status;
//    int log_length;
//    int chars_written = 0;
//    char* info_log;
//    switch(type)
//    {
//        case VERTEX_LOG:
//            glGetShaderiv(vertex_shader,GL_COMPILE_STATUS,&status);
//            glGetShaderiv(vertex_shader,GL_INFO_LOG_LENGTH,&log_length);
//            info_log = (char*)malloc(log_length*sizeof(char));
//            glGetShaderInfoLog(vertex_shader,log_length,&chars_written,info_log);
//            log << std::endl << info_log << std::endl;
//            free(info_log);
//            break;
//        case FRAGMENT_LOG:
//            glGetShaderiv(fragment_shader,GL_COMPILE_STATUS,&status);
//            glGetShaderiv(fragment_shader,GL_INFO_LOG_LENGTH,&log_length);
//            info_log = (char*)malloc(log_length*sizeof(char));
//            glGetShaderInfoLog(fragment_shader,log_length,&chars_written,info_log);
//            log << std::endl << info_log << std::endl;
//            free(info_log);
//            break;
//        case PROGRAM_LOG:
//            glGetProgramiv(shader_program,GL_LINK_STATUS,&status);
//            glGetProgramiv(shader_program,GL_INFO_LOG_LENGTH,&log_length);
//            info_log = (char*)malloc(log_length*sizeof(char));
//            glGetProgramInfoLog(shader_program,log_length,&chars_written,info_log);
//            log << std::endl << info_log  << std::endl;
//            free(info_log);
//            break;
//        default:
//            break;
//    }
//}

//int ShaderManager::setProgram()
//{
//    shader_program = glCreateProgram();
//    glAttachShader(shader_program,vertex_shader);
//    glAttachShader(shader_program,fragment_shader);
//    glBindAttribLocation(shader_program,0,"in_vertexPos");
//    glBindAttribLocation(shader_program,1,"in_normalVec");
//    glBindAttribLocation(shader_program,2,"in_texCoord");
//    glBindAttribLocation(shader_program,3,"useTexture");
//    glLinkProgram(shader_program);
//    shaderLog(PROGRAM_LOG);
//    return 0;
//}


//int ShaderManager::setShaders(string vs_file, string ps_file)
//{
//    log.open("shader_log");
//    loadShader(vs_file, GL_VERTEX_SHADER);
//    loadShader(ps_file, GL_FRAGMENT_SHADER);
//    setProgram();
//    log.close();
//    return 0;
//}

//void ShaderManager::bindProgram()
//{
//    glUseProgram(this->shader_program);
//}

//void ShaderManager::unbindProgram()
//{
//    glUseProgram(0);
//}



